﻿#define _CRT_SECURE_NO_WARNINGS 1
//25.1 题⽬描述：
//输⼊两个升序排列的序列，将两个序列合并为⼀个有序序列并输出。
//输⼊包含三⾏，第⼀⾏包含两个正整数n, m，⽤空格分隔。n表⽰第⼆⾏第⼀个升序序列中数字的个
//数，m表⽰第三⾏第⼆个升序序列中数字的个数。其中 1 <= n <= 30, 1 <= m <= 30
//第⼆⾏包含n个整数，⽤空格分隔。
//第三⾏包含m个整数，⽤空格分隔。
//输出为⼀⾏，输出⻓度为n + m的升序序列，即⻓度为n的升序序列和⻓度为m的升序序列中的元素重
//新进⾏升序序列排列合并。
#include <stdio.h>
int main() {
	int n = 0;
	int m = 0;
	//输⼊ 
	scanf("%d %d", &n, &m);
	//⽀持变⻓数组的 
	int arr1[30] = { 0 };
	int arr2[30] = { 0 };
	int arr3[60] = { 0 };
	//输⼊arr1 
	int i = 0;
	for (i = 0; i < n; i++)
	{
		scanf("%d", &arr1[i]);
	}
	//输⼊arr2
	for (i = 0; i < m; i++)
	{
		scanf("%d", &arr2[i]);
	}
	//合并arr1和arr2到arr3数组中 
	i = 0; //i遍历arr1 
	int j = 0;//j遍历arr2 
	int k = 0;//k遍历arr3 

	//合并两个数组的元素⾄arr3数组中 
	while (i < n && j < m)
	{
		//⽐较两个指针指向的元素⼤⼩ 
		//arr1数组当前元素较⼩，将此值放⼊arr3数组并令i和k后移 
		if (arr1[i] < arr2[j])
		{
			arr3[k] = arr1[i];
			i++;
			k++;
		}
		//arr2数组当前元素较⼩，将此值放⼊arr3数组并令j和k后移 
		else
		{
			arr3[k] = arr2[j];
			j++;
			k++;
		}
	}

	//若指针i越界，则arr1数组所有元素已经放⼊arr3数组 
	//arr2数组中有剩余元素，将它们依次放⼊arr3数组 
	if (i == n)
	{
		for (; j < m; j++)
		{
			arr3[k] = arr2[j];
			k++;
		}
	}

	//若指针j越界，则arr2数组所有元素已经放⼊arr3数组 
	//arr1数组中有剩余元素，将它们依次放⼊arr3数组 
	if (j == m)
	{
		for (; i < n; i++)
		{
			arr3[k] = arr1[i];
		}
		k++;
	}

    //打印 
  for (k = 0; k < m + n; k++)
  {
	printf("%d ", arr3[k]);
   }
return 0;
}